iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
自我挑戰組

打掉重練!Django的還債之旅~系列 第 29

Day29. test指令的過程和unittest的運作!

  • 分享至 

  • xImage
  •  

前言

我們昨天稍微寫了一些test來測試我們的Todolist,那當中下了很多次djang去run test的指令
'python manage.py test'
今天就來看看這個指令做了些什麼事吧!

正題

先來稍微看一下python unittest怎麼寫,因為django的test也是建立在unittest之上的
https://ithelp.ithome.com.tw/upload/images/20231012/20162905nBsGOcQ5HT.png

接下來~
老樣子的到core management commands下的test.py看handle function
https://ithelp.ithome.com.tw/upload/images/20231011/20162905oQLpPRJUJR.png
第一行的TestRunner從settings過來的,我想大家也都很熟悉了直接到
django.conf.global_settings.py下找到TEST_RUNNER
https://ithelp.ithome.com.tw/upload/images/20231011/20162905hkxNIJP3L1.png
然後就可以找到DiscoverRunner
https://ithelp.ithome.com.tw/upload/images/20231011/20162905FSkBG1g9Hi.png
接著往下看
https://ithelp.ithome.com.tw/upload/images/20231011/201629058dv4ldE2n4.png
https://ithelp.ithome.com.tw/upload/images/20231011/20162905WL6b3ktdcw.png
https://ithelp.ithome.com.tw/upload/images/20231011/20162905xkHOegnF7n.png
這邊可以看到他有setup環境 db等等,我們看看最重要的run test部分~
https://ithelp.ithome.com.tw/upload/images/20231011/20162905iIsM9rGw9B.png
https://ithelp.ithome.com.tw/upload/images/20231011/20162905bbb2qD2BzV.png
這邊的runner就是unittest中的runner了
https://ithelp.ithome.com.tw/upload/images/20231011/20162905ADLjnaOD4q.png
而這個run就看最重要的地方吧
https://ithelp.ithome.com.tw/upload/images/20231012/20162905L8CNFvlXj7.png
這邊的test就是我們剛剛傳進來的suite
那我們就來看看suite被call的時候會做什麼事吧!
看到call就要聯想到__call__
https://ithelp.ithome.com.tw/upload/images/20231012/20162905Zsm0Th9skh.png
再看run
https://ithelp.ithome.com.tw/upload/images/20231012/201629053ZkKg4a2C9.png
這邊就可以看到test運行前呢會先觸發class setup,結束會tear down~
然後接著看當中的test
https://ithelp.ithome.com.tw/upload/images/20231012/20162905W51CZM0UsG.png
一樣__call__
https://ithelp.ithome.com.tw/upload/images/20231012/20162905MAvnHfbiht.png
再往下
https://ithelp.ithome.com.tw/upload/images/20231012/20162905kZ56skB5V1.png
這邊也處理了很多東西
當中的super.__call__(result)就不多看了,裡面也是滿多東西XD

最後就來畫個久久沒畫的圖吧~
https://ithelp.ithome.com.tw/upload/images/20231012/20162905XwFKOoDtUN.png

https://ithelp.ithome.com.tw/upload/images/20231012/20162905OEG60FhfDp.png

結語

test也是博大精深的學問,其實有時候光是想test要怎麼寫就花了一些時間,但有test的保護下自己交付出去的程式碼也相對能有信心!最後在好奇心的驅使下去看了django test的過程~起初是想要了解setUp, setUpClass, tearDown, tearDownClass的關聯,後面就把test整個巡過了一遍,挺有趣的!


上一篇
Day28. 寫些test來測試我們的網頁!
下一篇
Day30. 最後的一天,鐵人賽的結束,也是下一場旅途的開始~
系列文
打掉重練!Django的還債之旅~30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言